import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
import relativeTime from 'dayjs/plugin/relativeTime'
import calendar from 'dayjs/plugin/calendar'
import duration from 'dayjs/plugin/duration'

// 配置dayjs
dayjs.locale('zh-cn')
dayjs.extend(relativeTime)
dayjs.extend(calendar)
dayjs.extend(duration)

class DateUtil {
  // 格式化日期
  static format(date, format = 'YYYY-MM-DD HH:mm:ss') {
    return dayjs(date).format(format)
  }

  // 获取相对时间
  static fromNow(date) {
    return dayjs(date).fromNow()
  }

  // 获取日历时间
  static calendar(date) {
    return dayjs(date).calendar()
  }

  // 获取当前时间戳
  static now() {
    return dayjs().valueOf()
  }

  // 获取今天开始时间
  static todayStart() {
    return dayjs().startOf('day').valueOf()
  }

  // 获取今天结束时间
  static todayEnd() {
    return dayjs().endOf('day').valueOf()
  }

  // 获取本周开始时间
  static weekStart() {
    return dayjs().startOf('week').valueOf()
  }

  // 获取本月开始时间
  static monthStart() {
    return dayjs().startOf('month').valueOf()
  }

  // 计算两个日期之间的差值
  static diff(date1, date2, unit = 'day') {
    return dayjs(date1).diff(dayjs(date2), unit)
  }

  // 添加时间
  static add(date, amount, unit = 'day') {
    return dayjs(date).add(amount, unit)
  }

  // 减少时间
  static subtract(date, amount, unit = 'day') {
    return dayjs(date).subtract(amount, unit)
  }

  // 判断是否为同一天
  static isSameDay(date1, date2) {
    return dayjs(date1).isSame(dayjs(date2), 'day')
  }

  // 判断是否为今天
  static isToday(date) {
    return dayjs(date).isSame(dayjs(), 'day')
  }

  // 判断是否为昨天
  static isYesterday(date) {
    return dayjs(date).isSame(dayjs().subtract(1, 'day'), 'day')
  }

  // 获取年龄
  static getAge(birthDate) {
    return dayjs().diff(dayjs(birthDate), 'year')
  }
}

export default DateUtil 